package cn.edu.zut.project1.controller;

import cn.edu.zut.project1.dto.ProductDTO;
import cn.edu.zut.project1.pojo.Product;
import cn.edu.zut.project1.pojo.Result;
import cn.edu.zut.project1.pojo.User;
import cn.edu.zut.project1.service.ProductService;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RestController
@RequestMapping("/product")

public class ProductController {

    @Autowired
    private ProductService productService;

    /**
     * 发布商品
     * @param productDTO
     * @return
     */
    @PostMapping("/publish")
    public Result publishProduct(@Validated @RequestBody ProductDTO productDTO,
                                 HttpSession session) {

        // 1. 从Session中获取登录用户对象（登录时已存入）
        User loginUser = (User) session.getAttribute("loginUser");

        // 2. 判断是否登录（未登录则返回错误）
        if (loginUser == null) {
            return Result.error("请先登录");
        }

        // 3. 从用户对象中获取userId
        Integer userId = loginUser.getId();


        log.info("用户发布商品：userId={}, 商品名称={}", userId, productDTO.getName());
        try {
            productService.publishProduct(productDTO, userId);
            return Result.success("下单成功", "商品发布成功");
        } catch (RuntimeException e) {
            return Result.error(e.getMessage());
        }
    }

    /**
     * 2. 获取我的商品列表
     * @return
     */
    @PostMapping("/my")
    public Result getMyProducts(HttpSession session) {

        // 1. 从Session中获取登录用户对象（登录时已存入）
        User loginUser = (User) session.getAttribute("loginUser");

        // 2. 判断是否登录（未登录则返回错误）
        if (loginUser == null) {
            return Result.error("请先登录");
        }

        // 3. 从用户对象中获取userId
        Integer userId = loginUser.getId();
        log.info("用户查询我的商品：userId={}", userId);
        try {
            List<Product> products = productService.getMyProduct(userId);
            return Result.success("下单成功", products);
        } catch (RuntimeException e) {
            return Result.error(e.getMessage());
        }
    }

    /**
     * 3. 获取商品详情（根据商品ID）
     * @param productId
     * @return
     */
    @PostMapping("/detail/{productId}")
    public Result getProductDetail(@PathVariable Integer productId) {
        log.info("查询商品详情：productId={}", productId);
        try {
            Product product = productService.getProductDetail(productId);
            return Result.success("下单成功", product);
        } catch (RuntimeException e) {
            return Result.error(e.getMessage());
        }
    }

    /**
     * 4. 商品状态修改（如：status=1→已卖出，status=2→下架）
     * @param productId
     * @param status
     * @return
     */
    @PostMapping("/status")
    public Result updateProductStatus(@RequestParam Integer productId,
                                      @RequestParam Integer status,
                                       HttpSession session) {

        // 1. 从Session中获取登录用户对象（登录时已存入）
        User loginUser = (User) session.getAttribute("loginUser");

        // 2. 判断是否登录（未登录则返回错误）
        if (loginUser == null) {
            return Result.error("请先登录");
        }

        // 3. 从用户对象中获取userId
        Integer userId = loginUser.getId();


        log.info("修改商品状态：productId={}, status={}, userId={}", productId, status, userId);
        try {
            productService.updateProductStatus(productId, status, userId);
            return Result.success("下单成功", "商品状态修改成功");
        } catch (RuntimeException e) {
            return Result.error(e.getMessage());
        }
    }

    /**
     * 5. 首页：获取所有在售商品
     * @return
     */
    @GetMapping("/all/on-sale")
    public Result getAllOnSaleProducts() {
        log.info("查询所有在售商品");
        try {
            List<Product> products = productService.getAllOnSaleProducts();
            return Result.success("操作成功", products);
        } catch (RuntimeException e) {
            return Result.error(e.getMessage());
        }
    }

    // 6. 根据商品类别展示商品
    @GetMapping("/category/{categoryId}")
    public Result getProductsByCategory(@PathVariable Integer categoryId) {
        log.info("根据商品类别查询商品：categoryId={}", categoryId);
        try {
            List<Product> products = productService.getProductsByCategory(categoryId);
            return Result.success("操作成功", products);
        } catch (RuntimeException e) {
            return Result.error(e.getMessage());
        }
    }



}
